/** @file transform.hpp Transformation generators */
#pragma once

#include "core/matrix.hpp"

namespace transforms
{
  /** An identity matrix
   * @return identity matrix */
  extern Matrix identity();
  
  /** A translation matrix
   * @param d direction vector
   * @return translation matrix */
  extern Matrix translate(const Vector& d);
  
  /** An X axis rotation
   * @param a angle
   * @return rotation matrix */
  extern Matrix rotatex(const float a);
  
  /** A Y axis rotation
   * @param a angle
   * @return rotation matrix */
  extern Matrix rotatey(const float a);
  
  /** A Z axis rotation
   * @param a angle
   * @return rotation matrix */
  extern Matrix rotatez(const float a);
  
  /** A scaling matrix
   * @param s scaling factor
   * @return scale matrix */
  extern Matrix scale(const Vector& s);
};
